/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.dao.TipoEventoDao;
import br.siseventos.model.TdTipoEvento;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Bruno
 */
@ManagedBean(name = "tipoEventoBean")
@ViewScoped
public class TipoEventoBean extends BaseBean {

    // Campos
    private String nome;
    private String descricao;
    private TdTipoEvento tipoEventoSelecionado;
    private TipoEventoDao daoTipoEvento;
    private List<TdTipoEvento> tiposEvento;
    // Construtor

    public TipoEventoBean() {
        // Inicializar o objeto DAO
        daoTipoEvento = new TipoEventoDao();
        popularDataTable();

    }

    // Getters e Setters
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public TdTipoEvento getTipoEventoSelecionado() {
        return tipoEventoSelecionado;
    }

    public void setTipoEventoSelecionado(TdTipoEvento tipoEventoSelecionado) {
        this.tipoEventoSelecionado = tipoEventoSelecionado;
    }

    public TipoEventoDao getDaoTipoEvento() {
        return daoTipoEvento;
    }

    public void setDaoTipoEvento(TipoEventoDao daoTipoEvento) {
        this.daoTipoEvento = daoTipoEvento;
    }

    public List<TdTipoEvento> getTiposEvento() {
        return tiposEvento;
    }

    public void setTiposEvento(List<TdTipoEvento> tiposEvento) {
        this.tiposEvento = tiposEvento;
    }

    // Actions e Listeners
    public void cadastrarTipoEvento(ActionEvent e) {
        // Criando o objeto a ser persistido no banco
        TdTipoEvento tipoEvento = new TdTipoEvento(nome, descricao, null);
        try {
            // Incluindo o objeto no banco
            daoTipoEvento.incluir(tipoEvento);

            // Atualizar a lista a ser exibida no DataTable
            popularDataTable();

            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de evento cadastrado com sucesso!",
                    FacesMessage.SEVERITY_INFO);

            // Adicionando a parametro de Callback
            CallbackHelper.addCallback("tipoEventoSalvo", true);

        } catch (Exception ex) {
            // Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao cadastrar tipo de evento!",
                    FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirTipoEvento(ActionEvent e) {
        try {
            // Excluindo o tipo de evento selecionado
            int x = getTipoEventoSelecionado().getIdtTipoEvento();
            daoTipoEvento.excluir(x);

            // Atualizar a lista a ser exibida no DataTable
            popularDataTable();

            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de evento excluído com sucesso!",
                    FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            // Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao excluir tipo de evento!",
                    FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarTipoEvento(ActionEvent e) {
        try {
            // Excluindo o tipo de evento selecionado
            daoTipoEvento.alterar(getTipoEventoSelecionado());

            // Atualizar a lista a ser exibida no DataTable
            popularDataTable();

            // Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de evento alterado com sucesso!",
                    FacesMessage.SEVERITY_INFO);

            // Adicionando a parametro de Callback
            CallbackHelper.addCallback("tipoEventoAlterado", true);
        } catch (Exception ex) {
            // Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao alterar tipo de evento!",
                    FacesMessage.SEVERITY_ERROR);
        }
    }
    // Util

    private void popularDataTable() {
        try {
            // Inicializar a lista de tipos de evento
            tiposEvento = daoTipoEvento.consultarTodos();
        } catch (Exception ex) {
        }
    }
}
